home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / ftp_srv2 / ftp_srv.frm < prev    next >
Text File  |  1997-12-17  |  15KB  |  503 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "FTP SERVER"
  5.    ClientHeight    =   4650
  6.    ClientLeft      =   1470
  7.    ClientTop       =   2820
  8.    ClientWidth     =   7335
  9.    Height          =   5055
  10.    Icon            =   FTP_SRV.FRX:0000
  11.    Left            =   1410
  12.    LinkTopic       =   "Form1"
  13.    ScaleHeight     =   4650
  14.    ScaleWidth      =   7335
  15.    Top             =   2475
  16.    Width           =   7455
  17.    Begin TextBox Text1 
  18.       Enabled         =   0   'False
  19.       Height          =   612
  20.       Left            =   120
  21.       MultiLine       =   -1  'True
  22.       TabIndex        =   4
  23.       Text            =   "If you want any explanation or wish my collaboration for any project, contact me through e-mail at UNISYSTEM@DNS.OMNIA.IT (refer to Anastasi Lorenzo)."
  24.       Top             =   3960
  25.       Width           =   7092
  26.    End
  27.    Begin PictureBox EndCmd 
  28.       BackColor       =   &H000000FF&
  29.       Height          =   1000
  30.       Left            =   0
  31.       ScaleHeight     =   975
  32.       ScaleWidth      =   975
  33.       TabIndex        =   0
  34.       Top             =   0
  35.       Width           =   1000
  36.    End
  37.    Begin Timer Timer1 
  38.       Enabled         =   0   'False
  39.       Index           =   4
  40.       Interval        =   50
  41.       Left            =   2040
  42.       Top             =   4680
  43.    End
  44.    Begin Timer Timer1 
  45.       Enabled         =   0   'False
  46.       Index           =   3
  47.       Interval        =   50
  48.       Left            =   1560
  49.       Top             =   4680
  50.    End
  51.    Begin Timer Timer1 
  52.       Enabled         =   0   'False
  53.       Index           =   2
  54.       Interval        =   50
  55.       Left            =   1080
  56.       Top             =   4680
  57.    End
  58.    Begin Timer Timer1 
  59.       Enabled         =   0   'False
  60.       Index           =   1
  61.       Interval        =   50
  62.       Left            =   600
  63.       Top             =   4680
  64.    End
  65.    Begin Timer Timer1 
  66.       Enabled         =   0   'False
  67.       Index           =   0
  68.       Interval        =   50
  69.       Left            =   120
  70.       Top             =   4680
  71.    End
  72.    Begin PictureBox StatusBar 
  73.       BackColor       =   &H000000FF&
  74.       Height          =   1000
  75.       Left            =   0
  76.       ScaleHeight     =   975
  77.       ScaleWidth      =   975
  78.       TabIndex        =   2
  79.       Top             =   0
  80.       Width           =   1000
  81.    End
  82.    Begin PictureBox Frame3D1 
  83.       BackColor       =   &H000000FF&
  84.       Height          =   1000
  85.       Left            =   0
  86.       ScaleHeight     =   975
  87.       ScaleWidth      =   975
  88.       TabIndex        =   3
  89.       Top             =   0
  90.       Width           =   1000
  91.       Begin ListBox LogWnd 
  92.          BackColor       =   &H00000000&
  93.          ForeColor       =   &H0000FF00&
  94.          Height          =   2328
  95.          Left            =   240
  96.          TabIndex        =   1
  97.          Top             =   360
  98.          Width           =   6612
  99.       End
  100.    End
  101.    Begin PictureBox VBServer1 
  102.       BackColor       =   &H000000FF&
  103.       Height          =   1000
  104.       Left            =   0
  105.       ScaleHeight     =   975
  106.       ScaleWidth      =   975
  107.       TabIndex        =   5
  108.       Top             =   0
  109.       Width           =   1000
  110.    End
  111. End
  112. Sub EndCmd_Click ()
  113. Dim i As Integer
  114.  
  115.   'close all connection
  116.   For i = 1 To MAX_N_USERS
  117.     If users(i).control_slot <> INVALID_SOCKET Then
  118.       'close control slot
  119.       retf = CloseTheSocket(users(i).control_slot)
  120.     End If
  121.     If users(i).data_slot <> INVALID_SOCKET Then
  122.       'close data slot
  123.       retf = CloseTheSocket(users(i).data_slot)
  124.     End If
  125.   Next
  126.   
  127.   'end FTP server
  128.   retf = WSACleanup()
  129.   End
  130.  
  131. End Sub
  132.  
  133. Sub Form_Load ()
  134. Dim i As Integer
  135. Dim hdr As String, item As String
  136.   '--- Initialization
  137.   'an FTP command is terminated by Carriage_Return +
  138.   'Line_Feed
  139.   crlf = Chr$(13) + Chr$(10)
  140.   'possible sintax errors in FTP commands
  141.   sintax_error_list(0) = "200 Command Ok."
  142.   sintax_error_list(1) = "202 Command not implemented, superfluous at this site."
  143.   sintax_error_list(2) = "500 Sintax error, command unrecognized."
  144.   sintax_error_list(3) = "501 Sintax error in parameters or arguments."
  145.   sintax_error_list(4) = "502 Command not implemented."
  146.   sintax_error_list(6) = "504 Command not implemented for that parameter."
  147.   'initializes the list which contains the names,
  148.   'passwords, access rights and default directory
  149.   'recognized by the server
  150.   Open WORK_DIR + "\ftp_srv.ini" For Input As NF_INI
  151.   Line Input #NF_INI, hdr  'usernames
  152.   If hdr = "[usernames]" Then
  153.     For i = 1 To N_RECOGNIZED_USERS
  154.       Line Input #NF_INI, item
  155.       usernames_list(i) = item
  156.     Next
  157.   Else
  158.     StatusBar.Caption = "Error in INI file!"
  159.     End
  160.   End If
  161.   Line Input #NF_INI, hdr  'passwords
  162.   If hdr = "[passwords]" Then
  163.     For i = 1 To N_RECOGNIZED_USERS
  164.       Line Input #NF_INI, item
  165.       passwords_list(i) = item
  166.     Next
  167.   Else
  168.     StatusBar.Caption = "Error in INI file!"
  169.     End
  170.   End If
  171.   Line Input #NF_INI, hdr  'access rights
  172.   If hdr = "[access_rights]" Then
  173.     For i = 1 To N_RECOGNIZED_USERS
  174.       Line Input #NF_INI, item
  175.       access_rights_list(i) = item
  176.     Next
  177.   Else
  178.     StatusBar.Caption = "Error in INI file!"
  179.     End
  180.   End If
  181.   Line Input #NF_INI, hdr  'default directories
  182.   If hdr = "[default_dirs]" Then
  183.     For i = 1 To N_RECOGNIZED_USERS
  184.       Line Input #NF_INI, item
  185.       default_dir_list(i) = item
  186.     Next
  187.   Else
  188.     StatusBar.Caption = "Error in INI file!"
  189.     End
  190.   End If
  191.   Close #NF_INI
  192.  
  193.   'initializes the records which contain the
  194.   'informations on the connected users
  195.   For i = 1 To MAX_N_USERS
  196.     users(i).list_index = 0
  197.     users(i).control_slot = INVALID_SLOT
  198.     users(i).data_slot = INVALID_SLOT
  199.     users(i).IP_address = ""
  200.     users(i).Port = 0
  201.     users(i).data_representation = "A"
  202.     users(i).data_format_ctrls = "N"
  203.     users(i).data_structure = "F"
  204.     users(i).data_tx_mode = "S"
  205.     users(i).cur_dir = ""
  206.     users(i).state = 0
  207.     users(i).full = False
  208.   Next
  209.  
  210.   'begins SERVER mode on port 21
  211.   VBServer1.Port = 21
  212.   VBServer1.SelectAction = FD_ACCEPT Or FD_CLOSE Or FD_READ Or FD_WRITE
  213.   VBServer1.OpenFlag = True
  214.   ServerSlot = VBServer1.SocketNumber
  215.  
  216. End Sub
  217.  
  218. Sub Form_Unload (Cancel As Integer)
  219.  
  220.   retf = WSACleanup()
  221.  
  222. End Sub
  223.  
  224. Sub Timer1_Timer (index As Integer)
  225. Dim close_data_cnt As Integer
  226. Dim error_on_data_cnt As Integer
  227.  
  228. Select Case files_info(index).retr_stor
  229.   
  230.   Case 0:
  231.   '--- R E T R  Command
  232.   If files_info(index).data_representation = "A" Then
  233.     If Not files_info(index).open_file Then
  234.       'open file
  235.       Open files_info(index).full_name For Input Lock Write As #index
  236.       files_info(index).open_file = True
  237.     End If
  238.     'sends the file on data connection;
  239.     'data are sent a line at a time
  240.     If files_info(index).try_again Then
  241.       're-send old line
  242.     Else
  243.       Line Input #index, files_info(index).buffer
  244.     End If
  245.     retf = send_data(files_info(index).buffer + crlf, index)
  246.     If retf < 0 Then 'SOCKET_ERROR
  247.       retf = WSAGetLastError()
  248.       If retf = WSAEWOULDBLOCK Then
  249.         files_info(index).try_again = True
  250.       Else
  251.         'error on sending
  252.         error_on_data_cnt = True
  253.         close_data_cnt = True
  254.       End If
  255.     Else
  256.       files_info(index).try_again = False
  257.     End If
  258.     If EOF(index) Then close_data_cnt = True
  259.   Else  'binary transfer
  260.     If Not files_info(index).open_file Then
  261.       'open file
  262.       Open files_info(index).full_name For Binary Lock Write As #index
  263.       files_info(index).open_file = True
  264.     End If
  265.     'sends file on data connection;
  266.     'data are sent in blocks of 1024 bytes
  267.     If files_info(index).next_block = 0 Then
  268.       files_info(index).file_len = LOF(index)
  269.       '# of blocks
  270.       files_info(index).blocks = Int(files_info(index).file_len / 1024)
  271.       '# of remaining bytes
  272.       files_info(index).spare_bytes = files_info(index).file_len Mod 1024
  273.       files_info(index).buffer = String$(1024, " ")
  274.